DELIM    [\t ]
NUMERO   [0-9]
LETRA    [A-Za-z_]
C_INT  {NUMERO}+
C_DOUBLE  {NUMERO}+"."{NUMERO}+
ID       {LETRA}({LETRA}|{NUMERO})*
C_CHAR    "'"."'"
C_STRING "'"[^'].*"'"
OPEN    "{"
CLOSE      "}"
FUNCTION "func"
VAR      "var"
IF       "if"
THEN     "then"
ELSE     "else"
AND      "and"
OR       "or"
NOT      "not"
FOR      "for"
DO       "do"
WHILE    "while"
OF       "of"
ARRAY    "array"

INTEGER  "int"
DOUBLE   "double"
BOOL     "bool"
STRING   "string"
CHAR     "char"

PRINT    "print"
PRINTLN  "println"
READ     "read"

PROG_MAIN "prog main"
MAIN      "main"


%%

[\n]        { numLinha++; numCol = 0; ultimaLinha = ""; }
{DELIM}     { numCol++; ultimaLinha += yytext; }

{OPEN}     { rastreiaToken(yytext); return _OPEN; }
{CLOSE}       { rastreiaToken(yytext); return _CLOSE; }
{FUNCTION}  { rastreiaToken(yytext); return _FUNCTION; }
{VAR}       { rastreiaToken(yytext); return _VAR; }
{IF}        { rastreiaToken(yytext); return _IF; }
{THEN}      { rastreiaToken(yytext); return _THEN; }
{ELSE}      { rastreiaToken(yytext); return _ELSE; }
{AND}       { rastreiaToken(yytext); return _AND; }
{OR}        { rastreiaToken(yytext); return _OR; }
{NOT}       { rastreiaToken(yytext); return _NOT; }
{FOR}       { rastreiaToken(yytext); return _FOR; }
{DO}        { rastreiaToken(yytext); return _DO; }
{WHILE}     { rastreiaToken(yytext); return _WHILE; }
{ARRAY}     { rastreiaToken(yytext); return _ARRAY; }
{OF}        { rastreiaToken(yytext); return _OF; }

{PRINT}     { rastreiaToken(yytext); return _PRINT; }
{PRINTLN}   { rastreiaToken(yytext); return _PRINTLN; }
{READ}      { rastreiaToken(yytext); return _READ; }

{PROG_MAIN}        { rastreiaToken(yytext); return _PROG_MAIN; }
{MAIN}        { rastreiaToken(yytext); return _MAIN; }

{INTEGER}   { rastreiaToken(yytext, "i"); return _INTEGER; }
{DOUBLE}    { rastreiaToken(yytext, "d"); return _DOUBLE; }
{CHAR}    { rastreiaToken(yytext, "c"); return _CHAR; }
{STRING}    { rastreiaToken(yytext, "s"); return _STRING; }
{BOOL}    { rastreiaToken(yytext, "b"); return _BOOL; }


"<-"        { rastreiaToken(yytext); return _ATRIB; }
"<>"        { rastreiaToken(yytext); return _DIF; }
">="        { rastreiaToken(yytext); return _GEQ; }
"<="        { rastreiaToken(yytext); return _LEQ; }

{C_INT}   { rastreiaToken(yytext, "i"); return _C_INT; }
{C_CHAR}   { rastreiaToken(yytext, "c"); return _C_CHAR; }
{C_STRING}   { rastreiaToken(yytext, "s"); return _C_STRING; }
{C_DOUBLE}   { rastreiaToken(yytext, "d"); return _C_DOUBLE; }

{ID}        { rastreiaToken(yytext); return _ID; }

.           { rastreiaToken(yytext); return *yytext; }
 
%%


 


